
struct garbage {
	void * value;
	struct garbage * next;
};

typedef struct garbage * garbage;

typedef double sample;

typedef unsigned long int counter;

typedef sample * output;

typedef output * input;

struct module {
	input * inputs;
	int input_count;

	input * named_inputs;
	int named_input_count;
	char ** input_names;

	output * outputs;
	int output_count;

	output * named_outputs;
	int named_output_count;
	char ** output_names;

	int buffer_size;
	garbage buffer_garbage;
	sample * buffer;
	void * storage;

	struct module * next;
	char * debug;
	char * type;

	void(* processor )( struct module * );
	void(* customizer )( struct module *, char *, char * );
};

typedef struct module * module;
typedef void(* customizer )(module, char *, char *);
typedef void(* initializer )(module);
typedef void(* processor )(module);
